home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / basic / qbfaqr01.zip / SAVESCR.QRM < prev    next >
Text File  |  1992-07-26  |  3KB  |  150 lines

  1. DECLARE SUB SaveScreen ()
  2. DECLARE SUB SaveScreen2 ()
  3. DECLARE SUB SaveScreen3 ()
  4. DECLARE SUB RestoreScreen ()
  5. DECLARE SUB RestoreScreen2 ()
  6. DECLARE SUB RestoreScreen3 ()
  7. DECLARE FUNCTION MaxX% ()
  8. DECLARE FUNCTION MaxY% ()
  9. DECLARE FUNCTION MaxCol% ()
  10. DECLARE FUNCTION MaxRow% ()
  11.     'Main program musts
  12.     DIM GraphScr%(14000) 'I think this will be enough for any graph screen
  13.     DIM TextScr(80, 50) AS STRING * 2 'Two bytes in Text mode to store
  14.                         'attributes also
  15.     COMMON SHARED /ScreenSave/ GraphScr%(), TextScr() AS STRING * 2, ScrnMode%, ErrNum5%
  16.     CONST True = -1, FALSE = 0
  17.     'Need QB.LIB for RestoreScreen3
  18.     '$INCLUDE: 'QB.BI'
  19.     
  20.     'Your main program code goes here
  21.     'ScrnMode% must equal to current screen mode at all times!
  22.     'Eg.
  23.     ScrnMode% = 13
  24.     SCREEN ScrnMode%
  25.     FOR J = 1 TO 25
  26.         LOCATE J
  27.         PRINT STRING$(80, "A");
  28.     NEXT
  29.     SaveScreen
  30.     CLS
  31.     PRINT "This is a Test!"
  32.     SLEEP
  33.     RestoreScreen
  34.     SLEEP
  35.  
  36.     '...
  37.     END
  38.     'End of your main program
  39.  
  40.     'Add other checks inside SELECT if needed
  41. ErrorHandler:
  42.         SELECT CASE ERR
  43.             CASE 5
  44.                 ErrNum5% = True
  45.                 RESUME NEXT
  46.         END SELECT
  47.  
  48. 'End of Example
  49.  
  50.     'Note that the following routines might be wrong.  I've only tested
  51.     'these on a VGA monitor
  52.     FUNCTION MaxCol%
  53.         SELECT CASE ScrnMode%
  54.             CASE 0, 3, 4, 8 TO 12
  55.                 MaxCol% = 80
  56.             CASE 1, 7, 13
  57.          MaxCol% = 40
  58.         END SELECT
  59.     END FUNCTION
  60.  
  61.     FUNCTION MaxRow%
  62.         SELECT CASE ScrnMode%
  63.             CASE 0 TO 4, 7 TO 10, 13
  64.          MaxRow% = 25
  65.             CASE 11, 12
  66.          MaxRow% = 30
  67.         END SELECT
  68.     END FUNCTION
  69.  
  70.     FUNCTION MaxX%
  71.         SELECT CASE ScrnMode%
  72.             CASE 1, 7, 13
  73.          MaxX% = 320
  74.             CASE 2, 4, 8 TO 12
  75.          MaxX% = 640
  76.             CASE 3
  77.          MaxX% = 720
  78.         END SELECT
  79.     END FUNCTION
  80.  
  81.     FUNCTION MaxY%
  82.         SELECT CASE ScrnMode%
  83.             CASE 1, 2, 7, 8, 13
  84.                 MaxY% = 200
  85.             CASE 9, 10
  86.                 MaxY% = 350
  87.             CASE 11, 12
  88.                 MaxY% = 480
  89.             CASE 3
  90.                 MaxY% = 348
  91.             CASE 4
  92.                 MaxY% = 400
  93.         END SELECT
  94.     END FUNCTION
  95.  
  96.     SUB RestoreScreen
  97.         IF NOT ErrNum5% THEN
  98.             PCOPY 1, 0
  99.         ELSE
  100.             IF ScrnMode% > 0 THEN RestoreScreen2 ELSE RestoreScreen3
  101.         END IF
  102.     END SUB
  103.  
  104.     SUB RestoreScreen2
  105.         PUT (0, 0), GraphScr%, PSET
  106.     END SUB
  107.  
  108.     SUB RestoreScreen3
  109.         DIM InRegs AS RegType, OutRegs AS RegType
  110.         Ox = POS(0): Oy = CSRLIN
  111.         InRegs.cx = 1
  112.         FOR I = 1 TO MaxRow%
  113.             FOR J = 1 TO MaxCol%
  114.          LOCATE I, J
  115.          InRegs.ax = &H900 + ASC(LEFT$(TextScr(J, I), 1))
  116.          InRegs.bx = ASC(RIGHT$(TextScr(J, I), 1))
  117.          CALL Interrupt(&H10, InRegs, OutRegs)
  118.             NEXT
  119.         NEXT
  120.         LOCATE Oy, Ox
  121.     END SUB
  122.  
  123.     SUB SaveScreen
  124.         'You should also add your routine here to hide the mouse if you use
  125.         'MouseHideCursor
  126.         ErrNum5% = FALSE
  127.         ON ERROR GOTO ErrorHandler
  128.         PCOPY 0, 1
  129.         ON ERROR GOTO 0
  130.         IF ErrNum5% AND ScrnMode% > 0 THEN SaveScreen2 ELSE SaveScreen3
  131.         'If you hid the mouse then restore it -- routines not included here
  132.         'MouseShowCursor
  133.     END SUB
  134.  
  135.     SUB SaveScreen2
  136.         GET (0, 0)-(MaxX% - 2, MaxY% - 2), GraphScr%
  137.     END SUB
  138.  
  139.     SUB SaveScreen3
  140.         FOR I = 1 TO MaxCol%
  141.             FOR J = 1 TO MaxRow%
  142.                 TextScr(I, J) = ""
  143.                 TextScr(I, J) = CHR$(SCREEN(J, I))  'Save char
  144.                 'Save attribute
  145.                 TextScr(I, J) = TextScr(I, J) + CHR$(SCREEN(J, I, True))
  146.             NEXT
  147.         NEXT
  148.     END SUB
  149.  
  150.